package com.wontube.smr.web.client;

import java.util.List;
import java.util.Map;

import com.wontube.client.modle.vo.PagenateInfo;
import com.wontube.smr.client.model.po.Genre;
import com.wontube.smr.client.model.po.MVChart;
import com.wontube.smr.client.model.po.Movie;
import com.wontube.smr.client.model.vo.MVChartItems;
import com.wontube.smr.client.model.vo.MovieItems;
import com.wontube.smr.web.client.model.bo.QueryItemParams;

/**
 * 音乐接口
 * 
 * @author hewc@wondershare.cn
 * 
 */
public interface IMVWebHandler {
	/**
	 * 查询所有流派
	 * 
	 * @return
	 */
	public List<Genre> selectAllMusicGenres();
	
	/**
	 * 获取youtube mv
	 * 
	 * @param mvId
	 * @return
	 */
	Movie getYoutubeMV(String mvId);	

	/**
	 * 获取单个 mv
	 * 
	 * @param mvId
	 * @return
	 */
	Movie getMV(String mvId);	

	/**
	 * related mv
	 * 
	 * @param mvId
	 * @param pageInfo
	 * @return
	 */
	MovieItems listRelated(String mvId, PagenateInfo pageInfo);	
	
	/**
	 * 查询某artist的MV
	 * 
	 * @param artist
	 * @return
	 */
	public MovieItems selectMusicByArtist(String artist, PagenateInfo pageInfo);
	
	/**
	 *
	 * @param pageInfo
	 * @return
	 */
	public MovieItems listVevoMusics(PagenateInfo pageInfo);
	
	/**
	 * 
	 * @param params
	 * @param pageInfo
	 * @return
	 */
	public MovieItems listVevoMusics(QueryItemParams params, PagenateInfo pageInfo);
	
	/**
	 * youtube -> music
	 * @param params
	 * @param pageInfo
	 * @return
	 */
	public MovieItems listYoutubeMusics(QueryItemParams params, PagenateInfo pageInfo);
	
	//MVChart
	 /**
     * get mv chart by id
     * @param chartId
     * @return
     */
    MVChart getMVChartByVideoId(String videoId);   
    
    /**
     * list vevo top artists
     * @param pageInfo
     * @return
     */
    MVChartItems listVevoTopArtists(PagenateInfo pageInfo);
    
    /**
     * vevoArtists -> MVChartItems
     * vevoTops -> MVChartItems
     * @param pageInfo
     * @return
     */
    Map<String, MVChartItems> getVevoChartsHome(PagenateInfo pageInfo);
    
    /**
     * youtubeDailyItems -> MVChartItems
     * youtubeWeeklyItems -> MVChartItems
     * billboardItems -> MVChartItems
     * @param pageInfo
     * @return
     */
    Map<String, MVChartItems> getYoutubeChartsHome();
    
    /**
     * vevoArtists -> MVChartItems
     * vevoMusics -> MovieItems
     * @param pageInfo
     * @return
     */
    Map<String, Object> getMp3Home();
    
    /**
     * @param period
     * @param pageInfo
     * @return
     */
    MVChartItems getVevoVideoCharts(String period, PagenateInfo pageInfo);
    
    /**
     * @param period
     * @param pageInfo
     * @return
     */
    MVChartItems getVevoArtistCharts(String period, PagenateInfo pageInfo);
    
    /**
     * @param pageInfo
     * @return
     */
    MVChartItems getYoutubeDailyCharts(PagenateInfo pageInfo);
    
    /**
     * @param pageInfo
     * @return
     */
    MVChartItems getYoutubeWeeklyCharts(PagenateInfo pageInfo);
    
    /**
     * i18n music genres
     * @return
     */
    List<Genre> getI18nMusicGenres();
}
